/**
 * 图形加载器
 * $('div').chartLoader({args : {}});
 * 必须给出div元素
 * 入参args格式：
 * {
 *   id : 'id'
 * }
 * Created by 姚巨磊 on 2017-03-10.
 */
;
(function ($, window, document, undefined) {

    var app = require("public/app");
    var echarts = require("echarts");

    /**
     * 插件对象
     * @param $ele jquery实例
     * @constructor
     */
    function Plugin($ele) {
        this.$element = $ele;
    }

    /**
     * 插件对象初始化方法
     * @param setting
     */
    Plugin.prototype._init = function (args) {
        var self = this;
        //生成容器组件
        var $content = this.$element.find(".chart");
        if (!$content || $content.length == 0) {
            $content = $('<div class="chart" style="height: 100%;width: 100%">' +
            '<div class="header" ></div>' +
            '<div class="bodyer"></div>' +
            '<div class="footer"></div></div>');
            this.$element.append($content);
        }
        this.$content = $content;
        this.configOption = args;
        //加载图形
        this.loadChart();
    };

    /**
     * 加载图形
     *
     * 容器有3个部位
     * class header 头部 用于渲染时间选择器
     * class bodyer 体 用于渲染主体
     * class footer 脚 用于渲染单位/说明等
     *
     * 各类型自行安排使用
     *
     */
    Plugin.prototype.loadChart = function () {
        var type = this.configOption["chartType"];
        if (type) {
            var callFunction = "this." + type + "_loader()";
            //try {
            eval(callFunction);
            //} catch (e) {
            //    console.log("加载器出错：" + e)
            //}
        }
    }

    /**
     * 下面是各插件加载程序
     *
     * 加载程序由三部分组成
     * 1、LOADER_LIST {Array} 公布注册插件名称
     * 2、{type}_option {Array} 用于定义该插件需要的个性化属性，从this.opt.option中获取配置好的数据
     *
     * showName：
     *   展示名
     * name：
     *   键值
     * value：
     *  默认值
     *
     *      designer.js中将根据此属性渲染配置表单
     * 3、{type}_loader function 加载函数
     *
     */
    Plugin.prototype.LOADER_LIST = [{id: 'line', value: '折线图'},
        {id: 'pie', value: '饼图'},
        {id: 'gauge', value: '仪表盘'},
        {id: 'text', value: '文本框'},
        //{id: 'page', value: '页面'}, 暂时屏蔽 因为easyui的局限性
        {id: 'grid', value: '表格'}];


    /**
     * 文本框插件---text
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.text_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "数据", "name": "value", "value": ""},
            {"showName": "单位", "name": "unit", "value": ""}
        ];
    }
    //加载器
    Plugin.prototype.text_loader = function () {
        var $head = this.$content.find(".header");
        var $body = this.$content.find(".bodyer");
        var $foot = this.$content.find(".footer");
        var opt = this.configOption["option"];
        //头部
        $head.css({
            'text-align': 'left',
            'padding-left': '5px',
            'padding-right': '50px',
            'padding-top': '5px',
            'font-size': '18px',
            'font-weight': 'bolder',
            'font-family': 'sans-serif'
        }).text(opt["title"]);
        //主体
        $body.css({
            'height': '200px',
            'margin-top': '50px',
            'font-size': '60px'
        });
        //设置数据
        var key = opt["value"];
        var val = this.getData(key)
        var array = key.split("_");
        if (array.length == 2) {
            val = val[0][array["1"]];//根据key获取数据
        }
        $body.text(val);
        //底部
        $foot.css({
            'text-align': 'right',
            'right': '10px',
            'bottom': '10px',
            'position': 'absolute',
            'font-size': '14px',
            'font-weight': 'bolder',
            'font-family': 'sans-serif'
        }).html(opt["unit"]);
    }

    /**
     * 页面插件--page
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.page_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "jsp路径(本系统页面)", "name": "jsp", "value": ""},
            {"showName": "js路径(本系统页面)", "name": "js", "value": ""},
            {"showName": "url(其他系统）", "name": "url", "value": ""},
            {"showName": "页面高度（单位px）", "name": "h", "value": ""},
            {"showName": "页面宽度（单位px）", "name": "w", "value": ""}

        ];
    }
    //加载器
    Plugin.prototype.page_loader = function () {
        var $head = this.$content.find(".header");
        var $body = this.$content.find(".bodyer");
        //var $foot = this.$content.find(".footer");
        var opt = this.configOption["option"];
        //头部
        $head.css({
            'text-align': 'left',
            'padding-right': '50px',
            'padding-top': '5px',
            'font-size': '18px'
        }).text(opt["option"]["title"]);
        //主体
        if (opt["option"]["url"]) {
            $body.css({
                'height': opt["option"]["h"] + "px",
                'width': opt["option"]["w"] + "px"
            }).empty();
            var html = '<iframe frameborder="0" src="' + opt["option"]["url"];
            html = html + '" style="height:' + opt["option"]["h"] + "px" + ';width:' + opt["option"]["w"] + "px" + '"></iframe>';
            var container = $(html);
            $(container).appendTo($body);
        }
        //本地页面加载存在问题----当同时打开一个功能两次，对象选择会错乱，因为
        //在js中的jquery选择很多是全局选择，easyui的插件渲染也是全局存放的（没有存放在页面元素内）
        if (opt["option"]["jsp"]) {
            $body.css({
                'height': '100%'
            }).load(app.getBasePath() + opt["option"]["jsp"], function () {
                var OBJ = require(opt["option"]["js"]);
                new OBJ($body);
                $.parser.parse($body);
            });
        }
    }

    /**
     * 饼图---pie
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.pie_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "备注", "name": "subtext", "value": ""},
            {"showName": "宽度", "name": "width", "value": "250"},
            {"showName": "高度", "name": "height", "value": "200"},
            {"showName": "系列名称", "name": "series", "value": "XX数据"},
            {"showName": "图例", "name": "legend", "value": "['数据1', '数据2']"},
            {"showName": "数据组", "name": "data", "value": "[{value: 335, name: '数据1'},{value: 310, name: '数据2'}]"}

        ];
    }
    //加载器
    Plugin.prototype.pie_loader = function () {
        var $body = this.$content.find(".bodyer");
        var opt = this.configOption["option"];
        //echart不接受百分比宽度和高度，此处进行直接设置
        $body.css('width', opt["width"] + "px");
        $body.css('height', opt["height"] + "px");

        //渲染图形
        var option = {
            title: {
                text: opt["title"],
                subtext: opt['subtext'],
                x: 'left'
            },
            tooltip: {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                x: 'center',
                y: 'bottom',
                data: []
            },
            series: [
                {
                    name: opt["series"],
                    type: 'pie',
                    radius: '55%',
                    center: ['50%', '50%'],
                    data: [],
                    itemStyle: {
                        emphasis: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    }
                }
            ]
        };

        var legend = [];
        var data = [];
        //图例数据
        if (opt["legend"] && opt["legend"] != "") {
            if (opt["data"].indexOf("[") == 0) {
                legend = eval("(" + opt["legend"] + ")");
            } else {
                //原始数据
                var id_key = opt["legend"];
                var legendkey = id_key.split("_")[1];
                var rowdata = this.getData(id_key);
                //根据对应的键值组装数组
                for (var r = 0; r < rowdata.length; r++) {//数组长度由图例图例决定
                    legend.push(rowdata[r][legendkey]);
                }
            }
        }
        //系列数据
        if (opt["data"] && opt["data"] != "") {
            //写死的数据
            if (opt["data"].indexOf("[") == 0) {
                data = eval("(" + opt["data"] + ")");
            } else {
                //获取初始数据
                var id_key = opt["data"];
                var key = id_key.split("_")[1];
                var rowdata = this.getData(id_key);
                var value;
                //根据legend图例重新组装系列数据
                for (var i = 0; i < legend.length; i++) {//数组长度由图例图例决定
                    value = rowdata.filter(function (v) {
                        return v[legendkey] == legend[i];
                    })[0][key];
                    data.push({"value": value, "name": legend[i]});
                }
            }
        }
        option["legend"]["data"] = legend;
        option["series"][0]["data"] = data;
        var chart = echarts.init($body[0]);
        chart.setOption(option);
    }


    /**
     * 折线图---line
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.line_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "备注", "name": "subtext", "value": ""},
            {"showName": "宽度", "name": "width", "value": "250"},
            {"showName": "高度", "name": "height", "value": "200"},
            {"showName": "图例", "name": "legend", "value": "['数据1', '数据2']"},
            {"showName": "X", "name": "legend", "value": "['数据1', '数据2']"},

            {"showName": "数据组", "name": "data", "value": "[{value: 335, name: '数据1'},{value: 310, name: '数据2'}]"}

        ];
    }
    //加载器
    Plugin.prototype.line_loader = function () {
        var $body = this.$content.find(".bodyer");
        var opt = this.configOption["option"];
        //echart不接受百分比宽度和高度，此处进行直接设置
        $body.css('width', opt["width"] + "px");
        $body.css('height', opt["height"] + "px");
        function randomData() {
            now = new Date(+now + oneDay);
            value = value + Math.random() * 21 - 10;
            return {
                name: now.toString(),
                value: [
                    [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'),
                    Math.round(value)
                ]
            }
        }

        var data = [];
        var now = +new Date(1997, 9, 3);
        var oneDay = 24 * 3600 * 1000;
        var value = Math.random() * 1000;
        for (var i = 0; i < 1000; i++) {
            data.push(randomData());
        }
        //渲染图形
        var option = {
            title: {
                text: opt["title"]
            },
            tooltip: {
                trigger: 'axis',
                formatter: function (params) {
                    params = params[0];
                    var date = new Date(params.name);
                    return date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + params.value[1];
                },
                axisPointer: {
                    animation: false
                }
            },
            xAxis: {
                type: 'time',
                splitLine: {
                    show: false
                }
            },
            yAxis: {
                type: 'value',
                boundaryGap: [0, '100%'],
                splitLine: {
                    show: false
                }
            },
            series: [{
                name: '模拟数据',
                type: 'line',
                showSymbol: false,
                hoverAnimation: false,
                data: []
            }]
        };

        var chart = echarts.init($body[0]);
        chart.setOption(option);
        setInterval(function () {

            for (var i = 0; i < 5; i++) {
                data.shift();
                data.push(randomData());
            }

            chart.setOption({
                series: [{
                    data: data
                }]
            });
        }, 1000);
    }


    /**
     * 仪表盘---gauge
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.gauge_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "备注", "name": "subtext", "value": ""},
            {"showName": "宽度", "name": "width", "value": "250"},
            {"showName": "高度", "name": "height", "value": "200"},
            {"showName": "系列名称", "name": "series", "value": "XX数据"},
            {"showName": "数据组", "name": "data", "value": "50"}
        ];
    }
    //加载器
    Plugin.prototype.gauge_loader = function () {
        var $body = this.$content.find(".bodyer");
        var opt = this.configOption["option"];
        //echart不接受百分比宽度和高度，此处进行直接设置
        $body.css('width', opt["width"] + "px");
        $body.css('height', opt["height"] + "px");

        //渲染图形
        function detectionData(str) {
            var color = '#5eb95e';
            if (str >= 30 && str <= 60) {
                color = '#F37B1D';
            } else if (str > 60) {
                color = '#dd514c';
            }
            return color;
        }

        var option = {
            "title": {text: opt["title"]},
            "tooltip": {
                "formatter": "{a} <br/>{b} : {c}%"
            },
            "series": [{
                "name": opt["series"],
                "type": "gauge",
                "splitNumber": 5,
                "center": ["50%", "50%"],
                "axisLine": {
                    "lineStyle": {
                        "color": [
                            [0.31, "#F37B1D"],
                            [1, "#e9ecf3"]
                        ],
                        "width": -10
                    }
                },
                "axisTick": {
                    "lineStyle": {
                        "color": "#3bb4f2",
                        "width": 3
                    },
                    "length": 15,
                    "splitNumber": 1
                },
                "axisLabel": {
                    "distance": -10,
                    "textStyle": {
                        "color": "#000"
                    }
                },
                "splitLine": {
                    "show": false
                },
                "itemStyle": {
                    "normal": {
                        "color": "#494f50"
                    }
                },
                "detail": {
                    "formatter": "{value}%",
                    "offsetCenter": [0, "60%"],
                    "textStyle": {
                        "fontSize": 18,
                        "color": "#F37B1D"
                    }
                },
                "data": [{
                    "name": "",
                    "value": 0
                }]
            }]
        };
        var chart = echarts.init($body[0]);
        chart.setOption(option);
        var self = this;
        self.setTimer(self.configOption,$body,function(){
            var key = opt["data"];
            var value = self.getData(key);
            var array = key.split("_");
            if (array.length == 2) {
                value = value[0][array["1"]];//根据key获取数据
            }
            // (Math.random() * 100).toFixed(2) - 0;
            option.series[0].data[0].value = value;
            option.series[0].axisLine.lineStyle.color[0][0] = value / 100;
            option.series[0].axisLine.lineStyle.color[0][1] = detectionData(value);
            chart.setOption(option, true);
        });
    }


    /**
     * 表格---grid
     */
        //数据项--定义为函数，防止被外部修改
    Plugin.prototype.grid_option = function () {
        return [
            {"showName": "标题", "name": "title", "value": ""},
            {"showName": "备注", "name": "subtext", "value": ""},
            {
                "showName": "字段组（filed-对面数据源的键值；title-显示名称；width-宽度；align-对齐方式）",
                "name": "fields",
                "value": "{filed: 'name', title: '姓名',width:'100',align:'center'},{key: 'sex', name: '性别',width:'100',align:'center'}"
            },
            {"showName": "数据源", "name": "data", "value": "[{name: '张三',sex:'男'},{name: '李四', sex: '男'}]"}

        ];
    }
    //加载器
    Plugin.prototype.grid_loader = function () {
        var $body = this.$content.find(".bodyer");
        var opt = this.configOption["option"];
        //echart不接受百分比宽度和高度，此处进行直接设置
        var $table = $('<table title="' + opt["title"] + '"></table>');
        $body.css({width: '100%', height: '100%'}).empty().append($table);
        var gridData = [];
        if (opt["data"].indexOf("[") == 0) {
            gridData = eval("(" + opt["data"] + ")");
        } else {
            gridData = this.getData(opt["data"]);
        }
        var col = [];
        if (opt["fields"] && opt["fields"] != "") {
            col = eval("([[" + opt["fields"] + "]])");
        }
        //根据data获取col
        $table.datagrid({
            rownumbers: true,
            singleSelect: true,
            border: false,
            data: gridData,
            width: 'auto',
            height: '100%',
            columns: col
        });
    }

    /**
     * 获取数据源数据
     *
     * @param key 格式 dsID_键值
     */
    Plugin.prototype.getData = function (key) {
        if (!key || key == "") {
            return [];
        }
        if (key.indexOf("_") < 0) {
            return eval("(" + key + ")");
        }
        var value = [];
        $.ajax({
            async: false,
            type: 'get',
            contentType: "application/json",
            url: app.urlBuild("/dirms/dev/dataSource/viewData?key=" + key)
        }).done(function (data) {
            value = data;
        });

        return value;
    }
    /**
     * 插入时间选择条
     */
    Plugin.prototype.generateDatePicker = function (config, i) {
        var timeElement = document.getElementsByClassName('wrapper')[i];
        var dateHtml = '<form><select class="custom-date" name="select" style="float: right;"> <option value="1" selected="selected">最近1天</option> <option value="3"  >最近3天</option> <option value="7">最近7天</option> <option value="30">最近1个月</option> <option value="90">最近3个月</option> <option value="custom">自定义</option> </select> </form>';
        var $date = $(dateHtml);
        $(timeElement).append($date);

        var picker = $date.find('.custom-date').dateRangePicker();
        return picker;
    }

    /**
     * 设置定时器
     *
     * @param opt 图形表单配置信息
     * @param $ele 需要定时的节点
     * @param func 定时执行的函数
     */
    Plugin.prototype.setTimer = function (opt, $ele, func) {
        var isRes = opt["refFlag"];//是否刷新
        var refMs = opt["refMs"];//刷新间隔
        //实时执行一次函数
        func.call(this);
        //设置定时器
        if (isRes == '1') {
            var self = this;
            //清除之前的定时器
            self.clearTimer($ele);
            //设置新定时器
            var timerId = setInterval(func, parseInt(refMs));
            //绑定定时器ID到元素上----在画布销毁的时候清除定时器
            $ele.data("timerId", timerId);
        }
    }
    /**
     * 清除之前的定时器
     * @param $ele
     */
    Plugin.prototype.clearTimer = function ($ele) {
        var oldTimer = $ele.data("timerId");
        if(oldTimer){
            window.clearInterval(oldTimer);
        }
    }


    /**
     * 清除所有bodyer上面的定时器
     *
     * @param $parent
     */
    Plugin.prototype.clearAllTimer = function () {
        var self = this;
        this.$element.find(".bodyer").each(function(){
            self.clearTimer($(this));
        });
    }
    /**
     * 插件发布的方法
     * @type {string[] 数组元素=Plugin的方法名}
     */
    Plugin.publicMethods = ['getLoaderList', 'getLoaderOption', 'loadDailog','clearAllTimer','clearTimer'];

    /**
     * 获取加载器列表
     */
    Plugin.prototype.getLoaderList = function () {
        return this.LOADER_LIST;
    }
    /**
     * 获取加载器配置项
     * @param loaderName
     */
    Plugin.prototype.getLoaderOption = function (loaderName) {
        if (!loaderName) return [];
        var cmd = "this." + loaderName + "_option()";
        try {
            return eval(cmd);
        } catch (e) {
            console.log("读取加载器配置信息出错：" + e)
        }

    }
    /**
     * 定义jquery插件
     * @returns {$.fn}
     */
    $.fn.chartLoader = function () {
        var userArgs = arguments;//用户调用$("selector").erTab()时传入的参数。此处保存下来，以便在下面的each中使用。
        var eachResult = [];//下面的each中，每次调用时返回的值
        var pluginArray = [];//避免多个对象覆盖问题，pluginArray不作为全局变量

        this.each(function () {//循环处理每个jquery元素
            var $this = $(this);//注意，进入each方法后，需要$(this)包裹一下才是jquery对象

            //根据元素id从插件实例数组中筛选出已经创建的插件对象，如果元素未创建实例，则初始化一个，并增加到pluginArray。使用插件对象的目的是可以保持插件状态
            var plugin = $.grep(pluginArray, function (item, index) {
                return item['key'] === $this.attr("id");
            });
            if (plugin.length === 1) {
                plugin = plugin[0].value;
            } else {
                plugin = new Plugin($this);
                pluginArray.push({
                    key: $this.attr("id"),
                    value: plugin
                })
            }

            var args = $.merge([], userArgs);//复制一份userArgs。因为下面会改变这个数组
            var method = args[0];//需要执行的方法。如果用户需要执行插件中的某个方法，则方法名应该在第一个参数。如$("").erTab("addTab" , {});

            //解析应该调用的插件方法
            if ($.grep(Plugin.publicMethods, function (item) {//用户调用形式如$("").erTab("addTab")或$("").erTab("addTab" , {})时，将调用用户指定的插件方法
                    return item === method;
                }).length === 1) {
                method = plugin[method];//method设置为plugin中的方法
                args = Array.prototype.slice.call(args, 1);//方法参数。当前用户调用形式下，从第二个输入参数开始，都是方法的执行参数
            } else if (typeof(method) === 'object' || !method) {//用户调用形式如$("").erTab()或$("").erTab({})时，直接执行init方法，初始化插件
                args = userArgs;
                method = plugin._init;
            } else {//用户希望调用插件中的方法，但给出的方法名不正确，则抛出错误
                $.error('Method ' + method + ' does not exist on jQuery.headMenu');
            }

            //执行插件方法
            var methodResult = method.apply(plugin, args);

            //如果插件方法有返回值，则存储到eachResult
            if (methodResult !== undefined) {
                eachResult.push(methodResult);
            }
        });

        //如果eachResult有值，则返回eachResult，否则返回jquery元素本身（即this）
        return eachResult.length === 0 ? this : eachResult.length === 1 ? eachResult[0] : eachResult;
    };
    /**
     * 生产 UUID
     * @returns {string}
     * @constructor
     */
    function UUID() {
        var s = [];
        var hexDigits = "0123456789abcdef";
        for (var i = 0; i < 36; i++) {
            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
        }
        s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
        s[8] = s[13] = s[18] = s[23] = "-";

        var uuid = s.join("");
        return uuid;
    }

    /**
     * 加载资源
     * @param opt :jsp（jsp路径：如/pages/app/kettle/ktWebService.jsp）
     *             js（js路径：如app/kettle/ktWebService，需要先在indexMain.js中加载
     *             text 标题
     *             w 宽度 默认为600
     *             h 高度 默认为500
     *             onSure 确定按钮调用函数
     *             sureText 确定按钮名称 默认为确定
     *             param 入参
     *             url 如果访问的是第三方页面，新增IFRAME容器进行存放，不使用本框架JSP加载模式
     *             callback 回调函数（返回目标页面js对象）
     *             mode 模式：dialog（弹出框-默认） tab（新窗口页） window（浏览器新窗口）
     */
    Plugin.prototype.loadDailog = function (opt) {
        //新增一个div元素 承载弹出框，销毁后移除该元素。
        var id = "dialog_" + UUID();
        var container = $('<div id="' + id + '"></div>');
        $(container).appendTo("#home_foot");
        $(container).load(app.getBasePath() + opt["jsp"], {},
            function (response, status, xhr) {
                var mudal = require(opt["js"]);
                opt["param"]["dialogObj"] = $(container);
                var obj = new mudal($(container), opt["param"]);
                //弹出窗口
                $(container).dialog({
                    title: opt["text"],
                    width: opt["w"] == null ? 600 : opt["w"],
                    height: opt["h"] == null ? 500 : opt["h"],
                    closed: false,
                    cache: false,
                    modal: true,
                    buttons: [
                        {
                            text: opt["sureText"] ? opt["sureText"] : '确定', iconCls: 'icon-save',
                            handler: function () {
                                if (opt["onSure"]) {
                                    opt["onSure"].call(this, obj);
                                }
                                $(container).dialog('destroy');
                            }
                        },
                        {
                            text: '取消',
                            handler: function () {
                                $(container).dialog('destroy');
                            }
                        }
                    ],
                    onDestroy: function () {
                        $("#home_foot").remove('#' + id);
                    },
                    onClose: function () {
                        $(container).dialog('destroy');
                    }
                });
                //重新渲染页面，不然首页的按钮样式会失效
                $.parser.parse("#" + id);
                //调用回调函数
                if (opt["callback"]) {
                    opt["callback"](obj);
                }
            }
        );
    }

    /**
     * 扩展easyui编辑器 dataSource数据源选择
     */
    $.extend($.fn.datagrid.defaults.editors, {
        dataSource: {
            init: function (container, options) {
                var input = $('<input/>').appendTo(container);
                return input.searchbox({
                    searcher: function (value, name) {
                        //弹出数据源选择界面
                        $(this).chartLoader("loadDailog", {
                            jsp: "/pages/app/graph/dsChooser.jsp",
                            js: "app/graph/dsChooser",
                            text: "数据信息",
                            h: "400",
                            w: "600",
                            onSure: function () {
                                var row = $("#graph_dsChooser_item_datagrid").datagrid("getSelections");
                                var dsId = "";
                                var result = "";
                                var key = "";
                                //多选数组
                                if (row.length) {
                                    dsId = row[0]["dsId"];
                                    var itemarray = [];
                                    $.grep(row, function (item, i) {
                                        itemarray.push(item["key"]);
                                    });
                                    key = itemarray.join(",");
                                } else {
                                    dsId = row["dsId"];
                                    key = row["key"]
                                }

                                var result = dsId + "_" + key;
                                input.searchbox("setValue", result);
                            },
                            callback: function () {
                            },
                            param: {}
                        });
                    }
                });

            },
            destroy: function (target) {
                $(target).searchbox("destroy");
            },
            getValue: function (target) {
                return $(target).searchbox("getValue");
            },
            setValue: function (target, value) {
                $(target).searchbox("setValue", value);
            },
            resize: function (target, width) {
                $(target).searchbox("resize", width);
            }
        }
    });

})
(jQuery, window, document);